﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Glossary;
using System.Web.UI.WebControls;

namespace StudentGUI
{
    /// <summary>
    /// Ansvar: Martin Raldholm
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

    public partial class StudentGUI : Form
    {
        private CreatedTest createdTest;
        private Student _student;

        public StudentGUI()
        {
            InitializeComponent();
            comboBox1_TestID.DataSource = IODatabase.GetTestIDsFromDataSource();

        }
        // Metod för att öppna rättat prov. Ansvar: Kit
        private void buttonOppnaRattadProv_Click(object sender, EventArgs e)
        {
            try
            {
                //if (openFileDialogOpenCorrectedTest.ShowDialog() != DialogResult.OK)
                //{
                //    return;
                //}
                CorrectedTest ct = IODatabase.ReadCorrectedTestFromDataSource("1");
                if (ct == null)
                {
                    throw new FormatException(string.Format("Filen hade ogiltig format."));
                }
                listViewShowCorrectedTest.Items.Clear();
                AddListViewItems(ct);
                panelStudentInfo.Visible = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        // Metod som används av buttonOppnaRattadProv_Click. Ansvar: Kit
        private void AddListViewItems(CorrectedTest ct)
        {
            for (int i = 0; i < ct.NumberOfWords; i++)
            {
                ListViewItem listViewItem = new ListViewItem(ct.Words[i].SwedishWord);
                listViewItem.SubItems.Add(ct.Words[i].ForeignWord);
                listViewItem.SubItems.Add(ct.StudentAnswers[i]);
                listViewItem.SubItems.Add(ct.AnswerIsCorrect[i] ? "Rätt" : "Fel");
                listViewShowCorrectedTest.Items.Add(listViewItem);

                labelStudentInfo.Text = string.Format("{0}", ct.Student.ToString());
                labelStudentInfo.Text += string.Format("\r\n\r\nSpråk: {0}", ct.LanguageOfTest);
                labelStudentInfo.Text += string.Format("\r\nAntal rätt: {0}", ct.Score);
                labelStudentInfo.Text += string.Format("\r\nAntal Frågor: {0}", ct.NumberOfWords);
            }
        }
        // Metod för att spara ifyllt test. Anvar: Martin
        private void button_save_test_Click(object sender, EventArgs e)
        {
            bool validated2 = true;
            FilledTest filledTest = new FilledTest(createdTest);
            filledTest.Student = _student;
            filledTest.DateOfTest = DateTime.Now;

            for (int i = 0; i < filledTest.StudentAnswers.Length; i++)
            {
                //sparar alla inskrivna värden i StudentAnswers
                filledTest.StudentAnswers[i] = dataGridView1.Rows[i].Cells["Column1_Foreign"].FormattedValue.ToString();
                if (filledTest.StudentAnswers[i] == "") { validated2 = false; }
            }
            // Kollar så att alla glosor är ifyllda
            if (validated2 == true)
            {
             
                IODatabase.WriteFilledTestToDataSource(filledTest);

            }

            else
            { MessageBox.Show("Alla fälten för glosor är inte ifyllda."); }
        }
        // Metod för att göra testet när adressuppgifterna är ifyllda. Ansvar: Martin
        private void button_do_test_Click(object sender, EventArgs e)
        {
            _student = new Student();
            bool validated = ValidateTextBoxFields();

            if (validated)
            {
                createdTest = IODatabase.ReadCreatedTestFromDataSource(comboBox1_TestID.Text);
                try
                {
                    if (createdTest != null)
                    {
                        // Ändrar kollumnen till korrekt språk
                        switch (createdTest.LanguageOfTest)
                        {
                            case Language.English:
                                Column1_Foreign.HeaderText = "Engelska";
                                break;
                            case Language.German:
                                Column1_Foreign.HeaderText = "Tyska";
                                break;
                            case Language.Spanish:
                                Column1_Foreign.HeaderText = "Spanska";
                                break;
                            default:
                                throw new Glossary.Exceptions.UnknownLanguageException();
                        }
                        panel2.Visible = true;
                        panel1.Visible = false;

                        // lägger till glosor på svenska
                        foreach (Word word in createdTest.Words)
                        {
                            string s = word.SwedishWord;
                            if (word.SwedishDescription != "")
                            {
                                s += " (" + word.SwedishDescription + ")";
                            }
                            dataGridView1.Rows.Add(s);
                            dataGridView1.Rows[0].Cells[1].Value = "";
                        }
                    }
                    else
                    {
                        MessageBox.Show("Kunde inte läsa från fil.");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
            {
                MessageBox.Show("Adressfälten är inte korrekt ifyllda.");
            }

        }
        //Metod för att validera textinmatningar. Ansvar Martin
        private bool ValidateTextBoxFields()
        {
            bool validated = true;
            // kontroll för att adressfälten är ifyllda
            if (textbox_name.Text != "") { _student.FirstName = textbox_name.Text; }
            else { validated = false; }
            if (textbox_surname.Text != "") { _student.LastName = textbox_surname.Text; }
            else { validated = false; }
            if (textbox_adress.Text != "") { _student.Adress.Street = textbox_adress.Text; }
            else { validated = false; }
            if (textbox_ssn1.Text != "" && textbox_ssn2.Text != "") { _student.SocialSecurityNumber = textbox_ssn1.Text + "-" + textbox_ssn2.Text; }
            else { validated = false; }
            if (textbox_zipcode.Text != "") { _student.Adress.ZipCode = textbox_zipcode.Text; }
            else { validated = false; }
            if (textbox_city.Text != "") { _student.Adress.City = textbox_city.Text; }
            else { validated = false; }
            if (comboBox1_countries.Text != "") { _student.Adress.Country = comboBox1_countries.Text; }
            else { validated = false; }
            return validated;
        }

        private void comboBox1_TestID_SelectedIndexChanged(object sender, EventArgs e)
        {


            //comboBox1_TestID.Items.AddRange(IODatabase.GetTestIDsFromDataSourc();
        }
    }
}
